package TCP;

/**
 * Day08_TestThread 类用于演示线程卖票的示例。
 *
 * @author Cheng-02
 * @version V1.0
 * @since 2024/4/3
 */
public class Day08_TestThread {
    public static void main(String[] args) {
        // 创建 MyThread 的实例
        MyThread myThread = new MyThread();
        // 初始化三个线程并启动，它们共享同一个 ticket 资源
        Thread thread1 = new Thread(myThread, "窗口1");
        Thread thread2 = new Thread(myThread, "窗口2");
        Thread thread3 = new Thread(myThread, "窗口3");
        // 启动三个线程
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

/**
 * MyThread 类继承自 Thread 类，实现卖票的业务逻辑。
 */
class MyThread extends Thread {
    int ticket = 100; // 初始化票数为 100

    /**
     * 重写 run 方法，实现多线程下的卖票操作。
     */
    @Override
    public void run() {
        //让三个窗口抢票慢一点
        // 该代码块尝试使当前线程暂停1000毫秒，以模拟售票过程的延时。
        while (true) {
            try {
                Thread.sleep(1000); // 尝试让当前线程睡眠1000毫秒
            } catch (InterruptedException e) {
                e.printStackTrace(); // 如果线程在睡眠时被中断，打印异常堆栈跟踪信息
            }
            synchronized (this) {
                // 当票数小于等于 0 时，结束卖票操作
                if (ticket <= 0) {
                    break;
                }
                // 输出卖票信息，并递减票数
                System.out.println(Thread.currentThread().getName() + "卖了" + ticket + "张票");
                ticket--;
            }
        }
    }
}

